package com.hx.er.common.interceptor;

import org.apache.struts2.ServletActionContext;

import com.hx.er.bean.base.UserBean;
import com.hx.er.common.system.Constants;
import com.hx.er.common.util.StringUtil;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LoginInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = 7928238152002519440L;

	@Override
	public String intercept(ActionInvocation ai) throws Exception {
		// 检查用户是否登录
		UserBean userInfo = (UserBean) ActionContext.getContext().getSession().get(Constants.SESSION_USER_INFO);
		
		// 获取根路径
		String servletPath = ServletActionContext.getRequest().getServletPath();
		String[] values = servletPath.split("/");
		String pkgPath = values[1];
		
		if (userInfo != null) {
			// user信息不为空，已登录，检查当前页面与权限是否匹配
			if (StringUtil.isEqual(Constants.STRUTS_PACKAGE_ADMIN, pkgPath)) {
				// 如果路径是管理员，则判断权限是否匹配
				if (userInfo.getUserTypeId() == Constants.USER_TYPE_ADMIN) {
					// 继续执行
					return ai.invoke();
				} else {
					return Constants.RESULT_ROLE_ERROR;
				}
			} else if (StringUtil.isEqual(Constants.STRUTS_PACKAGE_MANAGER, pkgPath)) {
				// 如果路径是管理员，则判断权限是否匹配
				if (userInfo.getUserTypeId() == Constants.USER_TYPE_MANAGER) {
					// 继续执行
					return ai.invoke();
				} else {
					return Constants.RESULT_ROLE_ERROR;
				}
			} else {
				// 如果路径是管理员，则判断权限是否匹配
				if (userInfo.getUserTypeId() == Constants.USER_TYPE_CUSTOMER) {
					// 继续执行
					return ai.invoke();
				} else {
					return Constants.RESULT_ROLE_ERROR;
				}
			}
		} else {
			// 未登录，根据不同的角色退到不同的登录页面
			if (StringUtil.isEqual(Constants.STRUTS_PACKAGE_ADMIN, pkgPath)) {
				return Constants.RESULT_ADMIN_LOGIN;
			} else if (StringUtil.isEqual(Constants.STRUTS_PACKAGE_MANAGER, pkgPath)) {
				return Constants.RESULT_MANAGER_LOGIN;
			}
			
			return Constants.RESULT_CUSTOMER_LOGIN;
		}
	}
}
